/**
 * 深拷贝函数
 * @param {Object|Array} target 需要被拷贝的对象或数组
 * @returns {Object|Array} 拷贝后的对象或数组
 */
function deepClone(target) {
    // 判断拷贝的目标是否是对象或数组
    if (typeof target !== 'object' || target === null) {
      // 如果不是对象或数组，直接返回目标值
      return target;
    }
  
    // 根据目标值的类型创建一个新的实例
    const result = Array.isArray(target) ? [] : {};
  
    // 遍历目标值
    for (let key in target) {
      // 判断目标值的属性是否为自身的属性
      if (target.hasOwnProperty(key)) {
        // 递归调用deepClone来拷贝每个属性值
        result[key] = deepClone(target[key]);
      }
    }
  
    return result;
  }

  // 原始数据
const obj = {
    name: 'hu',
    age: 25,
    hobbies: ['reading', 'swimming'],
    friend: {
      name: 'Bob',
      age: 30
    }
  };
  
  // 深拷贝
  const newObj = deepClone(obj);
  
  // 修改原始数据
  obj.age = 26;
  obj.hobbies.push('dancing');
  obj.friend.age = 31;
  
  console.log('原始数据:', obj);

  
  console.log('拷贝数据:', newObj);
